package com.shangke.corejava.ch7.abs;
/*
 * 1.使用abstract修饰的方法叫抽象方法，抽象方法没有方法体（没有大括号）
 * 2.一个类如果包含有抽象方法，则这个类必须是抽象类
 * 		注意：抽象类不一定包含抽象方法，即抽象类可以不包含抽象方法
 * 3.在抽象类中，可以同时包含抽象方法和非抽象方法
 * 4.抽象类不能使用new关键词进行实例化
 * 5.子类必须实现或重写父类定义的抽象方法；
 * 		即当需要子类重写或实现方式时，可以使用把特定的方法声明为抽象方法（对应的类就是抽象类）
 * 6.一个子类继承了一个抽象类，也会继承该父类的抽象方法
 * 		如果父类包含有抽象方法，则子类必须实现该抽象方法（子类也是抽象类除外）
 * 7.使用abstract修饰的类叫抽象类，抽象类不能进行实例化
 */

//使用abstract修饰的类叫抽象类，抽象类不能进行实例化
//finall 和   abstract 不能同时修饰类
//
public abstract class AbstractClass {
	//。使用final修饰的“变量”，成为常量
	//。常量就是在运行过程中，不能被修改的“变量”；
	//。属性常量需要在定义时进行初始化，常量一旦被初始化就不能被修改
	//。属性常量如果在定义的时候没有进行初始化，则可以在构造方法中初始化一次。一旦被赋值，就不能被修改
	private int id;
	private String name;
	
	public AbstractClass() {
		super();
	}
	//。类属性（使用static修饰的属性）必须在定义的时进行初始化，一旦被初始化则不能被修改（引用不能被修改）
	public static final String MAN="";
	
	public AbstractClass(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	//。抽象方法：修饰符号  abtract 返回值类型  方法名（参数列表）；---没有方法体
	//。抽象方法不能使用private关键词进行修饰，其他三个访问修饰符号可以
	//。抽象方法不能使用static关键词进行修饰
	//。抽象方法不能使用final关键词进行修饰，final修饰的方法不能被重写
	abstract void absMethod();
	//使用final修饰的方法称为终结方法，终结方法不能被重写
	public void print() {
		System.out.println("打印方法");
	}
	public static void mian(String[] args) {
		//。抽象类一般由非抽象的子类进行实例化，多态编辑
		AbstractClass nm=new SubAbstractClass() ;
		nm.absMethod();
	}

}
